package co.yixiang.modules.system.service.mapper;

import co.yixiang.common.mapper.CoreMapper;
import co.yixiang.modules.system.domain.Menu;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Set;

/**
 * 菜单映射接口，负责菜单数据的数据库操作
 */
@Repository
@Mapper
public interface MenuMapper extends CoreMapper<Menu> {

    /**
     * 根据菜单的 PID 查询子菜单列表
     * @param pid 父菜单ID
     * @return 子菜单列表
     */
    @Select("SELECT * from sys_menu m where m.pid = #{pid} and m.is_del = 0 ")
    List<Menu> findByPid(@Param("pid") long pid);

    /**
     * 根据角色ID查询菜单集合
     * @param roleId 角色ID
     * @return 菜单集合
     */
    @Select("select m.* from sys_menu m LEFT JOIN sys_roles_menus t on m.id= t.menu_id LEFT JOIN sys_role r on r.id = t.role_id where r.id = #{roleId} and m.is_del=0")
    Set<Menu> findMenuByRoleId(@Param("roleId") Long roleId);

    /**
     * 根据角色ID列表查询菜单列表
     * @param roleIds 角色ID列表
     * @return 菜单列表
     */
    @Select("<script>select m.* from sys_menu m LEFT OUTER JOIN sys_roles_menus t on m.id= t.menu_id LEFT OUTER JOIN sys_role r on r.id = t.role_id where m.is_del=0 and m.type!=2 and  r.id in <foreach collection=\"roleIds\" index=\"index\" item=\"item\" open=\"(\" separator=\",\" close=\")\">#{item}</foreach> order by m.sort asc</script>")
    List<Menu> selectListByRoles(@Param("roleIds") List<Long> roleIds);
}
